package com.xacero.sw;

import java.util.List;
import java.util.logging.Logger;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.World;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Entity;
import org.bukkit.entity.Player;
import org.bukkit.permissions.Permission;
import org.bukkit.plugin.java.JavaPlugin;

public class SimpleWorldsPlugin extends JavaPlugin {
   SimpleWorldAPI swapi = new SimpleWorldAPI();
   SimpleWorldBoot swb = new SimpleWorldBoot();
   @Override
   public void onEnable() {
      Logger log = Logger.getLogger("minecraft");
      log.info("提示:你可以修改文件 /plugins/SimpleWorldsPlugin/load.cfg 来设置自动加载世界!");
      this.swb.loadWorlds();
   }
   @Override
   public boolean onCommand(CommandSender s, Command c, String l, String[] a) {
      //切换世界
      if (c.getName().equalsIgnoreCase("switchworld")) {
         if (!s.hasPermission(new Permission("simpleworld.switch")) && !s.isOp()) {
            s.sendMessage(ChatColor.RED + "你没有跨世界传送的权限!");
            return true;
         }
         if (a.length < 1) {
            s.sendMessage(ChatColor.RED + "兄弟你想去哪里啊?");
            return false;
         }
         if (!this.swapi.doesWorldExist(a[0])) {
            s.sendMessage(ChatColor.RED + "世界不存在.你是不是打错了?");
            return true;
         }
         if (!this.swapi.isWorldLoaded(a[0])) {
            s.sendMessage(ChatColor.RED + "你不能传送到未加载的世界里面去.");
            return true;
         }
         Entity entity;
         if (a.length >= 2) {
            entity = Bukkit.getPlayer(a[1]);
         } else {
            if (!(s instanceof Player)) {
               s.sendMessage(ChatColor.RED + "我传送你*的个控制台!");
               return true;
            }
            entity = (Player) s;
         }
         if (entity == null) {
            s.sendMessage(ChatColor.RED + "请求的玩家" + a[1] + "不存在.");
            return true;
         }
         if (this.swapi.teleportEntityToWorld(entity, a[0])) {
            s.sendMessage("你被传送到了世界:" + a[0]);
            return true;
         }
         s.sendMessage(ChatColor.RED + "传送到世界:" + a[0] + "时出现了未知错误.");
         return true;
      }
      //删除世界
      if (c.getName().equalsIgnoreCase("deleteworld")) {
         if (!s.hasPermission(new Permission("simpleworld.delete")) && !s.isOp()) {
            s.sendMessage( ChatColor.RED + "你没有删除世界的权限!");
            return true;
         }
         if (a.length < 1) {
            s.sendMessage(ChatColor.RED + "兄弟你想删除啥啊?");
            return false;
         }
         if (!this.swapi.doesWorldExist(a[0])) {
            s.sendMessage(ChatColor.RED + "世界不存在,你是不是打错了?");
            return true;
         }
         if (this.swapi.isWorldLoaded(a[0])) {
            this.swapi.unloadWorld(a[0]);
         }
         if (this.swapi.deleteWorld(a[0])) {
            s.sendMessage( "世界" + a[0] + "已经永远的消失了.");
            return true;
         }
         s.sendMessage( "删除世界:" + a[0] + "时出现了未知错误.");
         return true;
      }
      //创建世界
      if (c.getName().equalsIgnoreCase("createworld")) {
         if (!s.hasPermission(new Permission("simpleworld.create")) && !s.isOp()) {
            s.sendMessage( ChatColor.RED + "你没有创建世界的权限!");
            return true;
         }

         if (a.length < 3) {
            s.sendMessage(ChatColor.RED + "参数不足.");
            return false;
         }
         boolean gs;
         try {
            gs = Boolean.parseBoolean(a[2]);
         } catch (NumberFormatException e) {
            gs = true;
         }

         s.sendMessage("创建世界:加载地形");
         this.swapi.createWorld(a[0], this.swapi.getEnvironmentFromString(a[1]), gs);
         s.sendMessage("世界:" + a[0] + "已经创建并加载!");
         return true;
      }
      //列举世界
      if (c.getName().equalsIgnoreCase("listworlds")) {
         if (!s.hasPermission(new Permission("simpleworld.list")) && !s.isOp()) {
            s.sendMessage(ChatColor.RED + "你没有列举世界的权限!");
            return true;
         }
         String list = "";
         List<World> worlds = this.swapi.getLoadedWorlds();
         for(int i = 0; i < worlds.size(); ++i) {
            list = list + ((World)worlds.get(i)).getName() + ", ";
         }
         s.sendMessage(ChatColor.GREEN + "世界列表:" + list);
         return true;
      }
      //加载世界
      if (c.getName().equalsIgnoreCase("loadworld")) {
         if (!s.hasPermission(new Permission("simpleworld.load")) && !s.isOp()) {
            s.sendMessage(ChatColor.RED + "你没有加载世界的权限!");
            return true;
         }
         if (a.length < 2) {
            s.sendMessage(ChatColor.RED + "参数不足啊哥");
            return false;
         }
         if (this.swapi.isWorldLoaded(a[0])) {
            s.sendMessage(ChatColor.RED + "这个世界已经被加载过了,大姐");
            return true;
         }
         if (!this.swapi.doesWorldExist(a[0])) {
            s.sendMessage(ChatColor.RED + "世界:" + a[0] + "死哪去了?");
            return true;
         }
         if (this.swapi.loadWorld(a[0], this.swapi.getEnvironmentFromString(a[1]))) {
            s.sendMessage("世界:" + a[0] + "加载成功!");
         } else {
            s.sendMessage(ChatColor.RED + "加载世界:" + a[0] + "时出现了未知错误.");
         }
         return true;
      }
      //卸载世界
      if (c.getName().equalsIgnoreCase("unloadworld")) {
         if (!s.hasPermission(new Permission("simpleworld.unload")) && !s.isOp()) {
            s.sendMessage(ChatColor.RED + "你没有权限卸载世界!");
            return true;
         }
         if (a.length < 1) {
            s.sendMessage(ChatColor.RED + "我哪知道你要卸载哪个世界啊!");
            return false;
         }
         if (!this.swapi.doesWorldExist(a[0])) {
            s.sendMessage(ChatColor.RED + "世界:" + a[0] + "并不存在!");
            return true;
         }
         if (!this.swapi.isWorldLoaded(a[0])) {
            s.sendMessage(ChatColor.RED + "世界:" + a[0] + "还没有被加载呢!");
            return true;
         }
         if (this.swapi.unloadWorld(a[0])) {
            s.sendMessage("世界:" + a[0] + "卸载成功!");
            return true;
         }
         s.sendMessage(ChatColor.RED + "卸载世界:" + a[0] + "时出现未知错误.");
         return true;
      }
      //彩蛋
      s.sendMessage("请不要私自修改plugin.yml!");
      return false;
   }
}
